gtk: Connect to GdkDisplay::setting-changed
authorMatthias Clasen <mclasen@redhat.com>
Mon, 30 Oct 2017 13:04:09 +0000 (09:04 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 30 Oct 2017 13:29:54 +0000 (09:29 -0400)
We still handle the setting event, for now.
That will be removed in a future commit.

gtk/gtksettings.c

index a7b0c7952e67c1276b73d18460cfbf7e3608c71e..fdf7b572b2748c834efd434c441244180f1984d2 100644 (file)
@@ -1192,6 +1192,23 @@ settings_init_style (GtkSettings *settings)
   settings_update_key_theme (settings);
 }
 
+static void
+setting_changed (GdkDisplay       *display,
+                 const char       *name,
+                 gpointer          data)
+{
+  GtkSettings *settings = data;
+  GParamSpec *pspec;
+
+  pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (settings), name);
+
+  if (!pspec)
+    return;
+
+  if (settings_update_xsetting (settings, pspec, TRUE))
+    g_object_notify_by_pspec (G_OBJECT (settings), pspec);
+}
+
 static GtkSettings *
 gtk_settings_create_for_display (GdkDisplay *display)
 {
@@ -1218,6 +1235,8 @@ gtk_settings_create_for_display (GdkDisplay *display)
 
   settings->priv->screen = gdk_display_get_default_screen (display);
 
+  g_signal_connect_object (display, "setting-changed", G_CALLBACK (setting_changed), settings, 0);
+
   v.display = display;
   v.settings = settings;
   g_array_append_val (display_settings, v);